import axiosInstance from '@/main.js';

/**
 * 上传单个图片文件到OSS（通过后端API）
 * @param {File} file - 要上传的文件
 * @returns {Promise<string>} - 返回上传后的文件URL
 */
export const uploadImageToOSS = async (file) => {
    try {
        console.log('开始通过后端API上传图片到OSS:', file.name);

        // 创建FormData对象
        const formData = new FormData();
        formData.append('file', file);

        // 调用后端上传接口
        const response = await axiosInstance.post('/oss/upload/propertyImages', formData, {
            headers: {
                'Content-Type': 'multipart/form-data'
            }
        });

        console.log('=== 上传响应详情 ===');
        console.log('response.status:', response.status);
        console.log('response.statusText:', response.statusText);
        console.log('response.data:', response.data);
        console.log('response.data类型:', typeof response.data);
        console.log('===================');

        // 处理不同的响应格式
        let fileUrl;

        if (typeof response.data === 'string') {
            // 如果直接返回URL字符串
            fileUrl = response.data;
            console.log('检测到字符串格式响应，直接使用URL:', fileUrl);
        } else if (response.data && response.data.code === 200) {
            // 如果是标准的Result格式 {code: 200, data: "url"}
            fileUrl = response.data.data;
            console.log('检测到Result格式响应，提取URL:', fileUrl);
        } else if (response.data && response.data.data) {
            // 如果是其他包含data字段的格式
            fileUrl = response.data.data;
            console.log('检测到包含data字段的响应，提取URL:', fileUrl);
        } else {
            console.error('无法解析的响应格式:', response.data);
            throw new Error('上传失败：无法解析响应格式');
        }

        if (fileUrl) {
            console.log('图片上传成功，URL:', fileUrl);
            return fileUrl;
        } else {
            throw new Error('上传失败：未获取到文件URL');
        }
    } catch (error) {
        console.error('=== 上传错误详情 ===');
        console.error('error:', error);
        console.error('error.message:', error.message);
        console.error('error.response:', error.response);
        console.error('error.request:', error.request);
        console.error('==================');

        if (error.response) {
            console.error('响应状态码:', error.response.status);
            console.error('响应数据:', error.response.data);
            throw new Error(`上传失败: ${error.response.data?.message || error.response.statusText}`);
        } else if (error.request) {
            console.error('请求对象:', error.request);
            throw new Error('网络错误，请检查网络连接');
        } else {
            throw new Error(`上传失败: ${error.message}`);
        }
    }
};

/**
 * 上传PDF文件到OSS（通过后端API）
 * @param {File} file - 要上传的PDF文件
 * @returns {Promise<string>} - 返回上传后的文件URL
 */
export const uploadPdfToOSS = async (file) => {
    try {
        console.log('开始通过后端API上传PDF到OSS:', file.name);

        // 创建FormData对象
        const formData = new FormData();
        formData.append('file', file);

        // 调用后端上传接口
        const response = await axiosInstance.post('/oss/upload/contractPDfs', formData, {
            headers: {
                'Content-Type': 'multipart/form-data'
            }
        });

        console.log('后端API响应:', response.data);

        if (response.data.code === 200) {
            const fileUrl = response.data.data;
            console.log('PDF上传成功，URL:', fileUrl);
            return fileUrl;
        } else {
            throw new Error(response.data.message || '上传失败');
        }
    } catch (error) {
        console.error('PDF上传失败:', error);
        if (error.response) {
            throw new Error(`上传失败: ${error.response.data.message || error.response.statusText}`);
        } else if (error.request) {
            throw new Error('网络错误，请检查网络连接');
        } else {
            throw new Error(`上传失败: ${error.message}`);
        }
    }
};

/**
 * 批量上传图片文件到OSS
 * @param {Array<File>} files - 要上传的文件数组
 * @returns {Promise<Array<string>>} - 返回上传后的文件URL数组
 */
export const uploadImagesToOSS = async (files) => {
    try {
        const uploadPromises = files.map(file => uploadImageToOSS(file));
        const urls = await Promise.all(uploadPromises);
        return urls;
    } catch (error) {
        console.error('批量上传失败:', error);
        throw error;
    }
};